       /**
 * Definition for singly-linked list.
 * struct ListNode {
 *    int val;
 *     struct ListNode *next;
 * };
 */
 
typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    ListNode* n1=headA;
    ListNode* n2=headB;
    int sizeA=0;
    int sizeB=0;
    while(n1)
    {
        sizeA++;
        n1=n1->next;
    }
      while(n2)
    {
        sizeB++;
        n2=n2->next;
    }

    //求绝对值
    int gap=abs(sizeA-sizeB);
    
    //长链表先走gap步,让他们在同一起点
    ListNode* longlist=headA;
    ListNode* lesslist=headB;
    if(sizeA<sizeB)
    {
        longlist=headB;
        lesslist=headA;
    }
    while(gap--)
    {
        longlist=longlist->next;
    }
    
    //已在同一起点，开始遍历两个链表，看是否相等
    while(lesslist && longlist)
    {
        if(longlist == lesslist)
        {
            return longlist;  //return lesslist
        }
        longlist=longlist->next;
        lesslist=lesslist->next;
    }
    return NULL;
}